Orgtbl mode has several
translator functions built-in: orgtbl-to-csv
(comma-separated values), orgtbl-to-tsv
(TAB-separated values) orgtbl-to-latex,
orgtbl-to-html, and orgtbl-to-texinfo.
Except for orgtbl-to-html1, these all use a
generic translator, orgtbl-to-generic. For example,
orgtbl-to-latex itself is a very short function that
computes the column definitions for the tabular
environment, defines a few field and line separators and then
hands processing over to the generic translator. Here is the
entire code:
(defun orgtbl-to-latex (table params)
"Convert the Orgtbl mode TABLE to LaTeX."
(let* ((alignment (mapconcat (lambda (x) (if x "r" "l"))
org-table-last-alignment ""))
(params2
(list
:tstart (concat "\\begin{tabular}{" alignment "}")
:tend "\\end{tabular}"
:lstart "" :lend " \\\\" :sep " & "
:efmt "%s\\,(%s)" :hline "\\hline")))
(orgtbl-to-generic table (org-combine-plists params2 params))))
As you can see, the properties passed into the function (variable PARAMS) are combined with the ones newly defined in the function (variable PARAMS2). The ones passed into the function (i.e. the ones set by the ‘ORGTBL SEND’ line) take precedence. So if you would like to use the LaTeX translator, but wanted the line endings to be ‘\\[2mm]’ instead of the default ‘\\’, you could just overrule the default with
#+ORGTBL: SEND test orgtbl-to-latex :lend " \\\\[2mm]"
For a new language, you can either write your own converter function in analogy with the LaTeX translator, or you can use the generic function directly. For example, if you have a language where a table is started with ‘!BTBL!’, ended with ‘!ETBL!’, and where table lines are started with ‘!BL!’, ended with ‘!EL!’, and where the field separator is a TAB, you could call the generic translator like this (on a single line!):
#+ORGTBL: SEND test orgtbl-to-generic :tstart "!BTBL!" :tend "!ETBL!"
:lstart "!BL! " :lend " !EL!" :sep "\t"
Please check the documentation string of the
function orgtbl-to-generic for a full list of
parameters understood by that function, and remember that you can
pass each of them into orgtbl-to-latex,
orgtbl-to-texinfo, and any other function using the
generic function.
Of course you can also write a completely new function doing
complicated things the generic translator cannot do. A translator
function takes two arguments. The first argument is the table, a
list of lines, each line either the symbol hline or
a list of fields. The second argument is the property list
containing all parameters specified in the
‘#+ORGTBL:
SEND’ line. The function must return a single
string containing the formatted table. If you write a generally
useful translator, please post it on emacs-orgmode@gnu.org so that
others can benefit from your work.